package com.example.app.listener;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @author wangzhuangzhuang
 * @DESC:
 * @date 2022-02-09 17:20
 */
@Slf4j
@WebListener
public class CustomListener implements ServletContextListener, ServletRequestListener,
									HttpSessionListener, ServletRequestAttributeListener {
	@Override
	public void contextInitialized(ServletContextEvent sce){
		log.info("================context创建==============");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce){
		log.info("===============context销毁==============");
	}

	@Override
	public void requestDestroyed(ServletRequestEvent sre){
		log.info("+++++++++++request监听器： 销毁+++++++++++++");
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre){
		log.info("+++++++++++request监听器： 创建+++++++++++++++");
	}

	@Override
	public void sessionCreated(HttpSessionEvent hse){
		log.info("-----------session创建--------------");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent hse){
		log.info("-----------session销毁--------------");
	}

	public void attributeAdded(ServletRequestAttributeEvent srae){
		log.info("------------------attributeAdded---------------");
	}

	public void attributeRemoved(ServletRequestAttributeEvent srae){
		log.info("-----------------attributeRemoved----------------");
	}

	public void attributeReplaced(ServletRequestAttributeEvent srae){
		log.info("-----------------attributeReplaced----------------");
	}
}
//实现ServletRequestListener接口，并重写requestDestroyed销毁和requestInitialized方法。一次ServletRequest的requestInitialized方法和requestDestroyed销毁方法的执行代表1次请求的接收与处理完毕。所以比较适合网站资源被访问次数的统计。
//实现HttpSessionListener接口，并重写sessionInitialized初始化和sessionDestroyed销毁方法，可以监听session会话的开启与销毁（用户的上线与下线）。比如：可以用来实现在线用户数量的统计。
//实现ServletContextListener接口，并重写contextInitialized初始化和contextDestroyed销毁方法，可以监听全局应用的初始化和销毁。比如：在系统启动的时候，初始化一些数据到内存中供后续使用。
//实现ServletRequestAttributeListener接口（或HttpSessionAttributeListener或ServletContextAttributeListener）。可以监听到对应的作用域内数据属性的attributeAdded新增、attributeRemoved删除、attributeReplaced替换等动作。